package mysql;

import java.sql.Connection;
import java.sql.DriverManager;




public class Connector {
	
	 
	 private String nomeDB = "db_SII_2010_2011";
	 private String url="jdbc:mysql://localhost/";
	 private String nomeUtente = "root";
     private String pwdUtente= "root";
     
	 private static Connector instance;

     
     private String errore;       // Raccoglie informazioni riguardo l'ultima eccezione sollevata
	 private Connection db;       // La connessione col Database
	 private boolean connesso;    // Flag che indica se la connessione ? attiva o meno
	 
	 
	 private int numConnessioniAttive;
	
	 public Connector() {
	      connesso = false;
	      errore = "";
	      numConnessioniAttive = 0;
	   }
	
	 // Apre la connessione con il Database
	 public Connection connetti() {
		 if (connesso){
			 numConnessioniAttive++;
			 return db;
		 }else{
			 try {

				 // Carico il driver JDBC per la connessione con il database MySQL
				 Class.forName("com.mysql.jdbc.Driver");

				 // Controllo che il nome del Database non sia nulla
				 if (!nomeDB.equals("")) {

					 // Controllo se il nome utente va usato o meno per la connessione
					 if (nomeUtente.equals("")) {

						 // La connessione non richiede nome utente e password
						 db = DriverManager.getConnection(url + nomeDB);
					 } else {

						 // La connessione richiede nome utente, controllo se necessita anche della password
						 if (pwdUtente.equals("")) {

							 // La connessione non necessita di password
							 db = DriverManager.getConnection(url + nomeDB + "?user=" + nomeUtente);
						 } else {

							 // La connessione necessita della password
							 db = DriverManager.getConnection(url + nomeDB + "?user=" + nomeUtente + "&password=" + pwdUtente);
						 }
					 }

					
				 } else {
					 System.out.println("Manca il nome del database!!");
					 System.out.println("Scrivere il nome del database da utilizzare all'interno del file \"config.xml\"");
					 System.exit(0);
				 }
			 } catch (Exception e) { 
				 errore = e.getMessage();
				 System.out.println("Errore richiesta connessione "+ errore);

			 }
			 // La connessione ? avvenuta con successo
			 connesso = true;
			 numConnessioniAttive++;
			 return db;
		 }
	 }
	   
	   // Chiude la connessione con il Database
	   public void disconnetti() {
		   try {
			   numConnessioniAttive--;
			   if(numConnessioniAttive == 0){
				   db.close();
				   connesso = false;
			   }
	       } catch (Exception e) { e.printStackTrace(); }
	   }

	 public static Connector getInstance() {
		 if (instance == null)
			 instance = new Connector();
		 return instance;
	}
	   

}
